package com.example.dell_pc.myapplication;

//import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
//import android.view.Menu;
//import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
//import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    //定义各控件变量
    private Button bt_0, bt_1, bt_2, bt_3, bt_4, bt_5, bt_6, bt_7, bt_8, bt_9, bt_dot, bt_equal, bt_div, bt_mul, bt_plus,  bt_per, bt_AC, bt_,bt_sub;
    private EditText editText;//输入
    private final String TAG = "MYCAL";//输出日志


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cal_new);
//        Button bt_clickme=findViewById(R.id.bt_clickme);//连接到Button
//      bt_clickme.setOnClickListener(new View.OnClickListener(){//给Button设置点击事件的监听器，点击之后迁移到下一个活动。
//            @Override
 //          public void onClick(View v)
//            //实现按钮点击事件
//            {
//                Intent it=new Intent(MainActivity.this,Main3Activity.class);//从MainActivity.this这个场景到Main3Activity场景
//               it.putExtra("key",144);//传入一个数据，从第一个页面传到第二个，然后在第二个场景加载。
//                startActivity(it);
//            }
//        });
        //启动cal_new之后，要对Button设置属性
        bt_0 = findViewById(R.id.bt_0);
        bt_1 = findViewById(R.id.bt_1);
        bt_2 = findViewById(R.id.bt_2);
        bt_3 = findViewById(R.id.bt_3);
        bt_4 = findViewById(R.id.bt_4);
        bt_5 = findViewById(R.id.bt_5);
        bt_6 = findViewById(R.id.bt_6);
        bt_7 = findViewById(R.id.bt_7);
        bt_8 = findViewById(R.id.bt_8);
        bt_9 = findViewById(R.id.bt_9);
        bt_dot = findViewById(R.id.bt_dot);
        bt_equal = findViewById(R.id.bt_equal);
        bt_mul = findViewById(R.id.bt_mul);
        bt_div = findViewById(R.id.bt_div);
        bt_plus = findViewById(R.id.bt_plus);
        bt_sub = findViewById(R.id.bt_sub);
        bt_per = findViewById(R.id.bt_per);
        bt_ = findViewById(R.id.bt_);
        bt_AC = findViewById(R.id.bt_AC);
        editText = findViewById(R.id.editText);


        //实例化事件处理对象，定义监听器

        MyOnClickLis myOnClickLis = new MyOnClickLis();//MyOnClickLis为自定义的一个类

        bt_0.setOnClickListener(myOnClickLis);//stton...即捕获到点击事件的发生
        bt_1.setOnClickListener(myOnClickLis);
        bt_2.setOnClickListener(myOnClickLis);//用同一个处理器处理
        bt_3.setOnClickListener(myOnClickLis);
        bt_4.setOnClickListener(myOnClickLis);
        bt_5.setOnClickListener(myOnClickLis);
        bt_6.setOnClickListener(myOnClickLis);
        bt_7.setOnClickListener(myOnClickLis);
        bt_8.setOnClickListener(myOnClickLis);
        bt_9.setOnClickListener(myOnClickLis);
        bt_dot.setOnClickListener(myOnClickLis);
        bt_per.setOnClickListener(myOnClickLis);
        bt_.setOnClickListener(myOnClickLis);
        bt_plus.setOnClickListener(myOnClickLis);
        bt_sub.setOnClickListener(myOnClickLis);
        bt_mul.setOnClickListener(myOnClickLis);
        bt_div.setOnClickListener(myOnClickLis);
        bt_equal.setOnClickListener(myOnClickLis);
        bt_AC.setOnClickListener(myOnClickLis);

    }

    //以下定义事件处理器类，计算机上的按钮触摸点击事件统一由这个类来处理
    private class MyOnClickLis implements View.OnClickListener {
        private String strOp1 = "0";//第一个操作数
        private String strOp2 = "";//第二个操作数
        private String operation = "";//当前使用的运算符
        private String strResult = "0";//当前显示的运算结果
        private int lastInputType = 0;//最后一次输入的是数字还是字符，数字---0，字符----1

        //以下定义的方法为数字输入
        private void numInput(int num) {
            Log.i(TAG, "当前点击的控件为数字" + num);
            //如果当前输入框只有一个数字0，则清除0直接替换。
            if (strResult.equals("0")) {
                strResult = "" + num;
            }
            //否则如果上次输入的是数字则直接追加数字即可
            else if (lastInputType == 0) {
                strResult = strResult + num;
            }
            //否则如果上次输入的是字符，则要先清除当前显示的内容
            else if (lastInputType == 1) {
                strResult = "" + num;
            }
            editText.setText(strResult);//更新输入框显示的内容
            lastInputType = 0;//并设置上次输入的内容位数字

        }

        //以下定义的方法为点号输入
        private void dotInput() {
            //如果当前输入的数字有点号，则不能在输入点号，或者输入之后也只显示一个点号
            if (strResult.indexOf('.') == -1) {
                strResult = strResult + ".";
                editText.setText(strResult);//更新输入框显示的内容
            }
        }

        //以下方法为运算符输入
        private void operationInput(String opr) {
            //如果上一步输入的是字符，
            if (lastInputType == 1) {
                operation = opr;
                lastInputType = 1;
                return;
            }
            //若当前还没有运算符输入
            if (operation.isEmpty()) {
                operation = opr;//当前运算符为第一个输入的运算符
                strOp1 = strResult;
            }
            //若当前不是第一个运算符
            else if (!strOp1.isEmpty()) {
                strOp2 = strResult;

                //加法运算
                if (operation.equals("+")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strOp2);
                    strResult = String.valueOf(op1 + op2);
                    editText.setText(strResult);//更新输入框显示的内容
                    strOp1 = strResult;
                    strOp2 = "";
                    operation = opr;//当前运算符为后输入的运算符
                }

                //减法运算
                else if (operation.equals("-")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strOp2);
                    strResult = String.valueOf(op1 - op2);
                    editText.setText(strResult);//更新输入框显示的内容
                    strOp1 = strResult;
                    strOp2 = "";
                    operation = opr;
                }

                //乘法运算
                else if (operation.equals("×")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strOp2);
                    strResult = String.valueOf(op1 * op2);
                    editText.setText(strResult);//更新输入框显示的内容
                    strOp1 = strResult;
                    strOp2 = "";
                    operation = opr;
                }

                //除法运算
                else if (operation.equals("÷")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strOp2);
                    strResult = String.valueOf(op1 / op2);
                    editText.setText(strResult);//更新输入框显示的内容
                    strOp1 = strResult;
                    strOp2 = "";
                    operation = opr;
                }


            }
            lastInputType = 1;
        }

        //以下是%运算
        private void percentInput() {
            strResult = String.valueOf(Double.parseDouble(strResult) / 100);
            editText.setText(strResult);
        }

        //以下是清除运算
        private void ACInput() {
            strResult = "0";
            lastInputType = 0;
            operation = "";
            strOp1 = strOp2 = "";
            editText.setText(strResult);
        }

        //以下是等号运算

        private void equalInput() {
            if (operation.isEmpty()) {
                return;//若当前还没有运算符被输入则直接返回
            }
            //如1+=这种情况，=是当前输入的
            if (lastInputType == 1 && !strOp1.isEmpty()) {
                if (operation.equals("+")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strResult);
                    strResult = String.valueOf(op1 + op2);
                    editText.setText(strResult);//更新输入框显示的内容
                }
                //减法运算
                else if (operation.equals("-")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strResult);
                    strResult = String.valueOf(op1 - op2);
                    editText.setText(strResult);//更新输入框显示的内容
                }

                //乘法运算
                else if (operation.equals("*")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strResult);
                    strResult = String.valueOf(op1 * op2);
                    editText.setText(strResult);//更新输入框显示的内容
                }

                //除法运算
                else if (operation.equals("/")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strResult);
                    strResult = String.valueOf(op1 / op2);
                    editText.setText(strResult);//更新输入框显示的内容
                }
            }

            //正常情况
            else if (lastInputType == 0 && !strOp1.isEmpty()) {
                strOp2 = strResult;
                if (operation.equals("+")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strOp2);
                    strResult = String.valueOf(op1 + op2);
                    editText.setText(strResult);//更新输入框显示的内容
                    strOp1 = "";
                    strOp2 = "";
                    operation = "";

                }
                //减法运算
                else if (operation.equals("-")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strOp2);
                    strResult = String.valueOf(op1 - op2);
                    editText.setText(strResult);//更新输入框显示的内容
                    strOp1 = "";
                    strOp2 = "";
                    operation = "";
                }

                //乘法运算
                else if (operation.equals("*")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strOp2);
                    strResult = String.valueOf(op1 * op2);
                    editText.setText(strResult);//更新输入框显示的内容
                    strOp1 = "";
                    strOp2 = "";
                    operation = "";
                }

                //除法运算
                else if (operation.equals("/")) {
                    double op1 = Double.parseDouble(strOp1);
                    double op2 = Double.parseDouble(strOp2);
                    strResult = String.valueOf(op1 / op2);
                    editText.setText(strResult);//更新输入框显示的内容
                    strOp1 = "";
                    strOp2 = "";
                    operation = "";
                }

            }
        }

        //触摸点击时间发生后进入这个方法
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.bt_0://按数字0
                    numInput(0);
                    break;
                case R.id.bt_1://按数字1
                    numInput(1);
                    break;
                case R.id.bt_2://按数字2
                    numInput(2);
                    break;
                case R.id.bt_3:
                    numInput(3);
                    break;
                case R.id.bt_4:
                    numInput(4);
                    break;
                case R.id.bt_5:
                    numInput(5);
                    break;
                case R.id.bt_6:
                    numInput(6);
                    break;
                case R.id.bt_7:
                    numInput(7);
                    break;
                case R.id.bt_8:
                    numInput(8);
                    break;
                case R.id.bt_9:
                    numInput(9);
                    break;
                case R.id.bt_dot:
                    dotInput();
                    break;
                case R.id.bt_plus:
                    operationInput("+");
                    break;
                case R.id.bt_sub:
                    operationInput("-");
                    break;
                case R.id.bt_mul:
                    operationInput("*");
                    break;
                case R.id.bt_div:
                    operationInput("/");
                    break;
                case R.id.bt_per:
                    percentInput();
                    break;
                case R.id.bt_AC:
                    ACInput();
                    break;
                case R.id.bt_equal:
                    equalInput();
                    break;
            }
        }
    }
}



//    @Override
//    public boolean onCreateOptionsMenu(Menu menu) {
//        getMenuInflater().inflate(R.menu.menu_1,menu);
//        return true;
//    }
//
//    @Override
//    public boolean onOptionsItemSelected( MenuItem item) {
//        switch(item.getItemId()){
//            case R.id.menu_op_add:
//                Toast.makeText(this,"test",Toast.LENGTH_LONG).show();
//                 break;
//            case  R.id.meun_op_delete:
//                Toast.makeText(this,"test",Toast.LENGTH_LONG).show();
//                break;
//
//        }
//        return super.onOptionsItemSelected(item);
//    }



